/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedBeans;

import dao.DaoDoutorLocal;
import dao.DaoExcessaoLocal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import pojo.Doutor;
import pojo.Excessao;

/**
 *
 * @author Rodolfo
 */
@ManagedBean
@SessionScoped
public class ExcessaoBean {

    @EJB
    private DaoExcessaoLocal daoExcessao;
    @EJB
    private DaoDoutorLocal daoDoutor;
    private Boolean editando = false;
    private Excessao regAnterior;
    private Excessao excessao;
    private Doutor doutorSelecionado;
    private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
    private Date horaInicial;
    private Date horaFinal;
    private Date dataPesquisaInicial;
    private Date dataPesquisaFinal;
    private String diaSemana = "";

    public ExcessaoBean() {
        this.excessao = new Excessao();
        this.doutorSelecionado = new Doutor();
        editando = false;
    }

    public String getDiaSemana() {
        System.out.println(diaSemana);
        return diaSemana;
    }

    public void setDiaSemana(String diaSemana) {
        System.out.println(diaSemana);
        this.diaSemana = diaSemana;

    }

    public Excessao getExcessao() {
        return excessao;
    }

    public void setExcessao(Excessao excessao) {
        this.excessao = excessao;
    }

    public String getDia_semana() {
        return excessao.getDia_semana();
    }

    public void setDia_semana(String dia_semana) {
        this.excessao.setDia_semana(dia_semana);
    }

    public Date getData() {
        return excessao.getData();
    }

    public void setData(Date data) {
        this.excessao.setData(data);
    }

    public Date getHorario() {
        return excessao.getHorario();
    }

    public void setHorario(Date horario) {
        this.excessao.setHorario(horario);
    }

    public Doutor getCodDoutor() {
        return excessao.getCodDoutor();
    }

    public void setCodDoutor(Doutor codDoutor) {
        this.excessao.setCodDoutor(codDoutor);
    }

    public void setDoutorSelecionado(Integer doutorSelecionado) {
        System.out.println("entro aki no setdoutroselecionado");
        setCodDoutor(daoExcessao.buscaExcessaoPorId(doutorSelecionado));
    }

    public Integer getDoutorSelecionado() {
        System.out.println(excessao);
        if (excessao == null) {
            this.excessao = new Excessao();
        }
        if (this.excessao.getCodDoutor() != null) {
            return excessao.getCodDoutor().getIdDoutor();
        }

        return null;
    }

    public void setDoutorSelecionadoExcessao(Integer doutorSelecionado) {
        System.out.println(doutorSelecionado);
        if (doutorSelecionado != null) {
            this.doutorSelecionado = daoExcessao.buscaExcessaoPorId(doutorSelecionado);
        }
    }

    public Integer getDoutorSelecionadoExcessao() {

        if (this.doutorSelecionado != null) {
            return this.doutorSelecionado.getIdDoutor();
        }

        return null;
    }

    public Date getDataPesquisaFinal() {
        return dataPesquisaFinal;
    }

    public void setDataPesquisaFinal(Date dataPesquisaFinal) {
        this.dataPesquisaFinal = dataPesquisaFinal;
    }

    public Date getDataPesquisaInicial() {
        return dataPesquisaInicial;
    }

    public void setDataPesquisaInicial(Date dataPesquisaInicial) {
        this.dataPesquisaInicial = dataPesquisaInicial;
    }

    public Date getHoraFinal() {
        return horaFinal;
    }

    public void setHoraFinal(Date horaFinal) {
        this.horaFinal = horaFinal;
    }

    public Date getHoraInicial() {
        return horaInicial;
    }

    public void setHoraInicial(Date horaInicial) {
        this.horaInicial = horaInicial;
    }

    public String getHorarioEscolhido() {
        if (getHorario() != null) {
            return sdf.format(getHorario());
        }
        return null;
    }

    public void setHorarioEscolhido(String horarioEscolhido) {
        try {
            setHorario(sdf.parse(horarioEscolhido));
        } catch (ParseException ex) {
            Logger.getLogger(AgendamentoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List<Doutor> getRetornaDoutores() {
        return daoDoutor.buscaTodosDoutores();
    }

    public List<String> getRetornaHorariosPorDoutor() {
        if (getCodDoutor() != null) {
            return daoExcessao.horariosDisponiveisPorDoutor(getCodDoutor());
        }
        return null;
    }

    public List<Excessao> getFiltraExcessaoPorParametros() {
        if (getDoutorSelecionadoExcessao() != null) {
            System.out.println(doutorSelecionado);
            if (diaSemana != null && (dataPesquisaInicial != null || dataPesquisaFinal != null)) {
                return null;
            }
            return daoExcessao.retornaExcessaoPorParametros(doutorSelecionado, diaSemana, dataPesquisaInicial, dataPesquisaFinal, horaInicial, horaFinal);
        }
        return null;
    }

    public void salvar(ActionEvent actionEvent) {
        if (getData() == null && getDia_semana() == null && getHorario() == null) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Precisa escolher pelo menos uma excessão", null));
        } else if (getData() != null && getDia_semana() != null) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Escolha o dia da semana ou uma data, e não os dois", null));
        } else {
            try {
                excessao = daoExcessao.salvar(excessao);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Registro gravado com sucesso."));
                System.out.println("clicou no salvar");
                editando = false;
            } catch (Exception ex) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao salvar: " + ex.getMessage(), null));
            }


        }
    }

    public void excluir(ActionEvent actionEvent) {
        try {
            System.out.println("entrou no excluiu");
            daoExcessao.excluir(excessao);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Excluido com sucesso"));
            excessao = new Excessao();
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), null));
        }
    }

    public boolean isCamposDesativados() {
        return !editando;
    }

    public boolean isEditando() {
        return editando;
    }

    public boolean isNovoDesativado() {
        return isEditando();
    }

    public boolean isEditarDesativado() {
        System.out.println(isEditando());
        System.out.println(excessao.getIdExcessao());
        return (isEditando() || excessao.getIdExcessao() == null);
    }

    public boolean isSalvarDesativado() {
        return !isEditando();
    }

    public boolean isExcluirDesativado() {
        return isEditarDesativado();
    }

    public boolean isCancelarDesativado() {
        return isSalvarDesativado();
    }

    public boolean isPesquisarDesativado() {
        return isNovoDesativado();
    }

    public void novo(ActionEvent actionEvent) {
        regAnterior = excessao;
        System.out.println("clicou no novo");
        excessao = new Excessao();
        editando = true;
    }

    public void editar(ActionEvent actionEvent) {
        regAnterior = excessao;
        editando = true;
        System.out.println("clicou no editar");
    }

    public void cancelar(ActionEvent actionEvent) {
        excessao = regAnterior;
        editando = false;
        System.out.println("clicou no cancelar");
    }
}
